/**
 * @breif: 将平铺数据根据 code 和 parentCode 构建成树形结构
 * @param {any[]} data 平铺的数据数组，每个元素需包含 code、parentCode、name 字段
 * @return {any[]} 返回树形结构数据，包含 children、value、label 字段
 */
const buildTreeData = (data: any[]) => {
  const map = new Map();
  const result: any[] = [];

  // 创建映射，以code为key
  data.forEach((item) => {
    map.set(item.code, {
      ...item,
      children: [],
      value: item.code,
      label: item.name
    });
  });

  // 构建树形结构
  data.forEach((item) => {
    const node = map.get(item.code);
    if (item.parentCode && map.has(item.parentCode)) {
      const parent = map.get(item.parentCode);
      parent.children.push(node);
    } else {
      // 没有父节点的作为根节点
      result.push(node);
    }
  });

  return result;
};

export const useBuildTree = (data: any[]) => {
  return buildTreeData(data)
}